#search_type（搜索类型），搜索配置，滚动搜索，数据备份
#query_then_fetch是默认的搜索类型，但也可以根据特定目的指定其它的搜索类型
    GET /_search?search_type=count
    #count（计数）
    #query_and_fetch（查询并且取回）
    #dfs_query_then_fetch 和 dfs_query_and_fetch
    #scan（扫描）和scan（扫描）

#preference（偏爱）
    #preference参数允许你控制使用哪个分片或节点来处理搜索请求
    #用户每次刷新页面，结果顺序会发生变化，避免这个问题方法是对于同一个用户总是使用同一个分片

#深度分页代价最高的部分是对结果的全局排序，但如果禁用排序，就能以很低的代价获得全部返回结果
    #扫描模式让Elasticsearch不排序，只要分片里还有结果可以返回，就返回一批结果，保持滚屏开启另一分钟。
    GET /old_index/_search?search_type=scan&scroll=1m
    {
        "query": { "match_all": {}},
        "size":  1000
    }

    #第二次获取记录，需要带回上一次的ID
    GET /_search/scroll?scroll=1m
    c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM4U0
    NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy
    UVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE7dG90YW
    xfaGl0czoxOw==

#禁用 _source 字段
    PUT /my_index
    {
        "mappings": {
            "my_type": {
                "_source": {
                    "enabled":  false
                }
            }
        }
    }
    #在 Elasticsearch 中，单独设置储存字段不是一个好做法。完整的文档已经被保存在 _source 字段中。
    #通常最好的办法会是使用 _source 参数来过滤你需要的字段,限定 _source 字段来
    GET /_search
    {
        "query":   { "match_all": {}},
        "_source": [ "title", "created" ]
    }

#映射禁用_all 字段
    PUT /my_index/_mapping/my_type
    {
        "my_type": {
            "_all": { "enabled": false }
        }
    }

#动态映射,控制是否可以随意添加字段
    PUT /my_index
    {
        "mappings": {
            "my_type": {
                "dynamic":      "strict", <1>
                "properties": {
                    "title":  { "type": "string"},
                    "stash":  {
                        "type":     "object",
                        "dynamic":  true
                    }
                }
            }
        }
    }
    #通过 dynamic 设置来控制这些行为
    true：自动添加字段（默认）
    false：忽略字段
    strict：当遇到未知字段时抛出异常

#日期检测，可以关闭
    PUT /my_index
    {
        "mappings": {
            "my_type": {
                "date_detection": false
            }
        }
    }

#动态模板，根据规则匹配分析器--dynamic_templates
#es: 字段名以 _es 结尾需要使用 spanish 分析器
#en: 所有其他字段使用 english 分析器
    PUT /my_index
    {
        "mappings": {
            "my_type": {
                "dynamic_templates": [
                    { "es": {
                          "match":              "*_es", <1>
                          "match_mapping_type": "text",
                          "mapping": {
                              "type":           "text",
                              "analyzer":       "spanish"
                          }
                    }},
                    { "en": {
                          "match":              "*", <2>
                          "match_mapping_type": "text",
                          "mapping": {
                              "type":           "text",
                              "analyzer":       "english"
                          }
                    }}
                ]
    }}}

#默认映射,_default_映射来指定公用设置会更加方便
#所有类型禁用 _all 字段，而只在 blog 字段上开启它
    PUT /my_index
    {
        "mappings": {
            "_default_": {
                "_all": { "enabled":  false }
            },
            "blog": {
                "_all": { "enabled":  true  }
            }
        }
    }

#重新索引数据
#创建一个新配置好的索引，然后将所有的文档从旧的索引复制到新的上
    GET /old_index/_search?search_type=scan&scroll=1m
    {
        "query": {
            "range": {
                "date": {
                    "gte":  "2014-01-01",
                    "lt":   "2014-02-01"
                }
            }
        },
        "size":  1000
    }

#索引别名和零停机时间
#索引 别名 就像一个快捷方式或软连接，可以指向一个或多个索引
    PUT /my_index_v1    # 创建索引 my_index_v1
    PUT /my_index_v1/_alias/my_index    # 将别名 my_index 指向 my_index_v1

#检测这个别名指向哪个索引
    GET /*/_alias/my_index

#哪些别名指向这个索引
    GET /my_index_v1/_alias/*

#旧索引迁移到了新的，而没有停机时间,新索引中添加别名的同时从旧索引中删除它
    POST /_aliases
    {
        "actions": [
            { "remove": { "index": "my_index_v1", "alias": "my_index" }},
            { "add":    { "index": "my_index_v2", "alias": "my_index" }}
        ]
    }

#手动刷新索引
    POST /blogs/_refresh    #只refresh 索引blogs


#修改配置项refresh_interval减少刷新的频率
PUT /my_logs
{
  "settings": {
    "refresh_interval": "30s" <1>
  }
}

#关闭自动刷新
    PUT /my_logs/_settings
    { "refresh_interval": -1 }


#使用索引的时候再打开它
    PUT /my_logs/_settings
    { "refresh_interval": "1s" }


#把索引中的每个分片都合并成一个段，减少段的数量（通常为1）达到提高搜索性能的目的
    POST /logstash-2014-10/_optimize?max_num_segments=1

